// 检测当前是否使用 pnpm 包管理器
// process.env.npm_execpath 存储当前执行的包管理器路径，通过正则匹配判断是否包含 "pnpm"
const isPnpm = /pnpm/.test(process.env.npm_execpath || '');

// 检测当前是否使用 npm 包管理器
// 两种情况均视为 npm：1. 命令为 install；2. 执行路径包含 "npm"
const isNpm = process.env.npm_command === 'install' || /npm/.test(process.env.npm_execpath || '');

// 检测当前是否使用 yarn 包管理器
// 两种情况均视为 yarn：1. 存在 YARN_VERSION 环境变量；2. 执行路径包含 "yarn"
const isYarn = !!process.env.YARN_VERSION || /yarn/.test(process.env.npm_execpath || '');

// 校验逻辑：如果不是 pnpm，且是 npm 或 yarn，则阻断安装并提示
if (!isPnpm && (isNpm || isYarn)) {
  // 输出红色错误提示：禁止使用 npm/yarn，必须用 pnpm
  console.error(`\u001b[31m❌ 错误：本项目禁止使用 npm/yarn！必须使用 pnpm 安装依赖。\u001b[39m`);
  // 输出蓝色指引：正确的安装命令及 pnpm 安装方法
  console.info(
    `\u001b[34m✅ 正确操作：执行 pnpm install 安装依赖（若未安装 pnpm，先运行 npm install -g pnpm）\u001b[39m`
  );
  process.exit(1); // 以错误状态码终止进程，阻止依赖安装继续执行
}
